/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.sep.gestores;

import edu.ucue.sep.controller.SucursalJpaController;
import edu.ucue.sep.model.Sucursal;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.map.MarkerDragEvent;
import org.primefaces.event.map.PointSelectEvent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;  
import org.primefaces.model.map.Marker; 

/**
 *
 * @author Andrea
 */
@ManagedBean(name = "sucursalManager")
@SessionScoped
public class SucursalManager implements Serializable{
    private Sucursal sucursal;
    private String descripcion;
    private String telefono;
    private String direccion;
    private double latitud;
    private double longitud;
    private String ciudad;
    private MapModel mapaSucursal;
    private MapModel mapaSucursales;
    List<Sucursal> sucursales;

    private MapModel simpleModel;  
  
    private SucursalJpaController sjpa;
 
     public SucursalManager() {  
        simpleModel = new DefaultMapModel();  
          
        //Shared coordinates
        
        LatLng coord1 = new LatLng(36.879466, 30.667648);  
        LatLng coord2 = new LatLng(36.883707, 30.689216);  
        LatLng coord3 = new LatLng(36.879703, 30.706707);  
        LatLng coord4 = new LatLng(36.885233, 30.702323);  
          
        //Basic marker  
        simpleModel.addOverlay(new Marker(coord1, "Konyaalti"));  
        simpleModel.addOverlay(new Marker(coord2, "Ataturk Parki"));  
        simpleModel.addOverlay(new Marker(coord3, "Karaalioglu Parki"));  
        simpleModel.addOverlay(new Marker(coord4, "Kaleici"));  
    }  
  
    public MapModel getSimpleModel() {  
        return simpleModel;  
    }  
    
    
    
   
    public String guardar(){
        sjpa=new SucursalJpaController();
        if (ciudad.equals("") || direccion.equals("") || telefono.equals("")){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(null, "Existen campos vacios"));
            return "";
        }
        
        sucursal.setCiudad(ciudad);
        sucursal.setDescripcion(descripcion);
        sucursal.setDireccion(direccion);
        sucursal.setLatitud(latitud);
        sucursal.setLongitud(longitud);
        sucursal.setTelefono(telefono);
        try{
            if (sucursal.getIdScursal()==0){
                sjpa.create(sucursal);
            }
            else{
                sjpa.edit(sucursal);
            }
            init();
        }catch(Exception e){
            e.printStackTrace();
        }
        return "";
    } 
    
    public String editarSucursal(Sucursal sucur){
        sucursal=sucur;
        descripcion=sucursal.getDescripcion();
        telefono=sucursal.getTelefono();
        direccion=sucursal.getDireccion();
        latitud=sucursal.getLatitud();
        longitud=sucursal.getLongitud();
        ciudad=sucursal.getCiudad();
        LatLng latlon=new LatLng(latitud, longitud);
        Marker marker=new Marker(latlon, ciudad);
        marker.setDraggable(true);
        mapaSucursal=new DefaultMapModel();
        mapaSucursal.addOverlay(marker);
        return "";
    }
    
    public void init(){
        sucursal=new Sucursal();
        descripcion="";
        telefono="";
        direccion="";
        latitud=0;
        longitud=0;
        ciudad="";
        mapaSucursal=new DefaultMapModel();
        mapaSucursales=new DefaultMapModel();
        sucursales=new ArrayList<Sucursal>();
        cargarSucursales();
    }
    
    public void cargarSucursales(){
        sjpa=new SucursalJpaController();
        mapaSucursales=new DefaultMapModel();
        sucursales=sjpa.findSucursalEntities();
        for (Sucursal suc:sucursales){
            LatLng latLng=new LatLng(suc.getLatitud(),suc.getLongitud());
            mapaSucursales.addOverlay(new Marker(latLng, suc.getCiudad()));
        }
    }
    
    public String preview(){
        LatLng latlng =new LatLng(latitud, longitud);
        mapaSucursal=new DefaultMapModel();
        Marker marker =new Marker(latlng);
        marker.setDraggable(true);
        mapaSucursal.addOverlay(marker);
        return "";
    }
    
    public String onPointSelect(PointSelectEvent event) {  
        LatLng latlng = event.getLatLng();  
        setLatitud(latlng.getLat());
        setLongitud(latlng.getLng());
        mapaSucursal=new DefaultMapModel();
        Marker marker =new Marker(latlng);
        marker.setDraggable(true);
        mapaSucursal.addOverlay(marker);
        return "";
    }
    
    public String onMarkerDrag(MarkerDragEvent event) {  
        Marker marker = event.getMarker();  
        LatLng latlng = marker.getLatlng();
        setLatitud(latlng.getLat());
        setLongitud(latlng.getLng());  
        return "";
    }  
      
    
     public Sucursal getSucursal() {
        return sucursal;
    }

    public void setSucursal(Sucursal sucursal) {
        this.sucursal = sucursal;
    }
    
    public List<Sucursal> getSucursales() {
        return sucursales;
    }

    public void setSucursales(List<Sucursal> sucursales) {
        this.sucursales = sucursales;
    }
    
    
    public String cancelar(){
        return "index";
    }
    public String getDescripcion() {
        return descripcion;
    }
    
    

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public double getLatitud() {
        return latitud;
    }

    public void setLatitud(double latitud) {
        this.latitud = latitud;
    }

    public double getLongitud() {
        return longitud;
    }

    public void setLongitud(double longitud) {
        this.longitud = longitud;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }
    
    public static SucursalManager getInstance() {
        ELContext context = FacesContext.getCurrentInstance().getELContext();
        ValueExpression ex = FacesContext.getCurrentInstance().getApplication().getExpressionFactory().
                createValueExpression(context, "#{sucursalManager}", SucursalManager.class);
        return (SucursalManager) ex.getValue(context);
    }

    public MapModel getMapaSucursal() {
        return mapaSucursal;
    }

    public void setMapaSucursal(MapModel mapaSucursal) {
        this.mapaSucursal = mapaSucursal;
    }

    public MapModel getMapaSucursales() {
        return mapaSucursales;
    }

    public void setMapaSucursales(MapModel mapaSucursales) {
        this.mapaSucursales = mapaSucursales;
    }
    
    
}
